package cn.cheniy.swiftmark.common.security.adapter;

import cn.cheniy.swiftmark.common.feign.FeignInsideAuthConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * @author cheniy
 * @description
 *  
 */
public class DefaultAuthConfigAdapter implements AuthConfigAdapter {

    private static final Logger logger = LoggerFactory.getLogger(DefaultAuthConfigAdapter.class);

    /**
     * 不实现其他 AuthConfigAdapter，使用 DefaultAuthConfigAdapter...所有 URL 都需要身份验证...
     */
    public DefaultAuthConfigAdapter() {
        logger.info("not implement other AuthConfigAdapter, use DefaultAuthConfigAdapter... all url need auth...");
    }

    /**
     * 内部直接调用接口，无需登录权限，feign白名单
     */
    private static final String FEIGN_INSIDER_URI = FeignInsideAuthConfig.FEIGN_INSIDE_URL_PREFIX + "/insider/**";

    /**
     * 外部直接调用接口，无需登录权限 unwanted auth
     */
    private static final String EXTERNAL_URI = "/**/ua/**";

    /**
     * swagger
     */
    private static final String DOC_URI = "/v3/api-docs";

    /**
     * 创建一个只包含单个元素的不可变列表。这里创建的列表仅包含一个元素 "/*"，表示匹配根路径下的所有请求。
     */
    @Override
    public List<String> pathPatterns() {
        return Collections.singletonList("/*");
    }

    /**
     * 不需要验证的装入到容器中
     *
     */
    @Override
    public List<String> excludePathPatterns(String... paths) {
        List<String> arrayList = new ArrayList<>();
        arrayList.add(DOC_URI);
        arrayList.add(FEIGN_INSIDER_URI);
        arrayList.add(EXTERNAL_URI);
        arrayList.addAll(Arrays.asList(paths));
        return arrayList;
    }
}
